#pragma warning disable 108
using System;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using Cephei;
using Cephei.Core;
using Cephei.Core.Generic;
using Microsoft.FSharp.Core;
using Cephei.QL.Models.Marketmodels.Evolvers;
namespace Cephei.QL.Models.Marketmodels.Evolvers.Volprocesses
{
    /// <summary> 
	/// ! Displaced diffusion LMM with uncorrelated vol process. Called "Shifted BGM" with Heston vol by Brace in "Engineering BGM." Vol process is an external input.
	/// </summary>
    [Guid ("115B743F-09B7-41e9-8CCA-BEFBA5F93654"),ComVisible(true)]
	public interface ISquareRootAndersen : Cephei.QL.Models.Marketmodels.Evolvers.IMarketModelVolProcess
	{
		///////////////////////////////////////////////////////////////
        // Methods
        //
        /// <summary> 
		/// 
		/// </summary>
		 ISquareRootAndersen NextPath {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Double Nextstep(Cephei.Core.IVector<Double> variates);
        /// <summary> 
		/// 
		/// </summary>
		 UInt64 NumberStateVariables {get;}
        /// <summary> 
		/// 
		/// </summary>
		 UInt64 NumberSteps {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Cephei.Core.IVector<Double> StateVariables {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Double StepSd {get;}
        /// <summary> 
		/// 
		/// </summary>
		 UInt64 VariatesPerStep {get;}
    }   

    /// <summary> 
	/// ! Displaced diffusion LMM with uncorrelated vol process. Called "Shifted BGM" with Heston vol by Brace in "Engineering BGM." Vol process is an external input. Factory
	/// </summary>
   	[ComVisible(true)]
    public interface ISquareRootAndersen_Factory 
    {
        ///////////////////////////////////////////////////////////////
        // Factory methods
        //
        /// <summary> 
		/// 
		/// </summary>
	    ISquareRootAndersen Create (Double meanLevel, Double reversionSpeed, Double volVar, Double v0, Cephei.Core.IVector<Double> evolutionTimes, UInt64 numberSubSteps_, Double w1, Double w2, Microsoft.FSharp.Core.FSharpOption<Double> cutPoint);
    }
}

